package org.iamd.domain.meta;

import java.util.List;

/**
 * Моделира номенклатурен елемент с възможност за избор от потребител.
 * 
 * @author И. Атанасов
 */
public interface Selectable extends Cloneable {

	/**
	 * Setter за описание.
	 * 
	 * @param description
	 *            описание
	 */
	public void setDescription(String description);

	/**
	 * Setter за наредба.
	 * 
	 * @param ordering
	 *            наредба
	 */
	public void setOrdering(Integer ordering);

	/**
	 * Setter за родител на елемента.
	 * 
	 * @param parent
	 *            родител
	 */
	public void setParent(Selectable parent);

	/**
	 * @return децата ако елемента има такива в противен случай празен списък
	 */
	List<? extends Selectable> getChildren();

	/**
	 * @return описателно име
	 */
	String getDescription();

	/**
	 * @return името за пред потребителя
	 */
	String getDisplayName();

	/**
	 * @return позиция
	 */
	Integer getOrdering();

	/**
	 * @return родителя на елемента ако има, в противен случай <code>null</code>
	 */
	Selectable getParent();

	/**
	 * @return системно име на елемента
	 */
	String getSystemName();

	/**
	 * @return дали е листо или не
	 */
	boolean isLeaf();

	/**
	 * Setter за името за пред потребителя.
	 * 
	 * @param displayName
	 *            името за пред потребителя
	 */
	void setDisplayName(String displayName);

	/**
	 * Setter за системно име на елемента.
	 * 
	 * @param systemName
	 *            системно име на елемента
	 */
	void setSystemName(String systemName);

}